package com.bnz.service.impl;

import com.bnz.mapper.DeptMapper;
import com.bnz.mapper.EmpMapper;
import com.bnz.pojo.Emp;
import com.bnz.pojo.PageResult;
import com.bnz.service.EmpService;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import tk.mybatis.mapper.entity.Example;

import java.util.List;
@Service
public class EmpServiceImpl implements EmpService {
    @Autowired
    private EmpMapper empMapper;
    @Autowired
    private DeptMapper deptMapper;

    // 1. 查询所有员工
    @Override
    public List<Emp> findAll() {
        // 1.1 查询所有员工
        List<Emp> emps = empMapper.selectAll();
        // 1.2 给每个员工找到对应的部门
        for (Emp emp : emps) {
            emp.setDname(deptMapper.selectByPrimaryKey(emp.getDid()).getDname());
        }
        return emps;
    }

    // 2. 分页查询
    @Override
    public PageResult<Emp> findByPage(int page, int pageSize) {
        // 2.1 开始分页
        PageHelper.startPage(page,pageSize);
        // 2.2 封装查询条件
        Example example = new Example(Emp.class);
        // 2.3 查询所有员工
        List<Emp> emps = empMapper.selectByExample(example);
        // 2.4 给每个员工找到对应部门
        for (Emp emp : emps) {
            emp.setDname(deptMapper.selectByPrimaryKey(emp.getDid()).getDname());
        }
        // 2.5 将集合转换为Page<Emp>集合
        Page<Emp> empPage = (Page<Emp>) emps;
        // 2.6 返回
        return new PageResult<>(empPage.getTotal(),empPage.getPages(),empPage.getResult(),page);
    }

    // 3. 条件查询带分页
    @Override
    public PageResult<Emp> search(int page, int pageSize, Emp emp) {
        // 3.1 开始分页
        PageHelper.startPage(page,pageSize);
        // 3.2 封装查询条件
        Example example = new Example(Emp.class);
        Example.Criteria criteria = example.createCriteria();
        // 3.3 先对传入过来的员工参数进行判断，不为空再添加封装条件
        if (emp != null){
            if (StringUtils.isNotBlank(emp.getEname())){
                criteria.andLike("ename","%" + emp.getEname() + "%");
            }
            if (StringUtils.isNotBlank(emp.getCity())){
                criteria.andLike("city","%" + emp.getCity() + "%");
            }
            if (emp.getDid() != null && emp.getDid() != 0){
                criteria.andEqualTo("did",emp.getDid());
            }
        }
        // 3.4 查询所有员工
        List<Emp> emps = empMapper.selectByExample(example);
        // 3.5 给每个员工找到对应部门
        for (Emp emp1 : emps) {
            emp1.setDname(deptMapper.selectByPrimaryKey(emp1.getDid()).getDname());
        }
        // 3.5 将员工集合转换为Page<Emp>集合
        Page<Emp> empPage = (Page<Emp>) emps;
        // 3.6 返回
        return new PageResult<>(empPage.getTotal(),empPage.getPages(),empPage.getResult(),page);
    }

    // 4. 根据id查询员工信息
    @Override
    public Emp findById(String eid) {
        // 4.1 根据id查询员工信息
        return empMapper.selectByPrimaryKey(eid);
    }

    // 5. 添加员工
    @Override
    public void add(Emp emp) {
        // 5. 添加员工
        empMapper.insert(emp);
    }

    // 6. 修改员工
    @Override
    public void update(Emp emp) {
        // 6.1 修改员工
        empMapper.updateByPrimaryKey(emp);
    }

    // 7. 删除员工
    @Override
    public void delete(String eid) {
        // 7.1 根据id来删除员工
        empMapper.deleteByPrimaryKey(eid);
    }


}
